สร้าง Service role และ Instance profile ที่ใช้สำหรับ Elastic Beanstalk ใน IAM
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
ครั้งนี้จะมาแนะนำเกี่ยวกับการสร้าง IAM Role ที่ต้องใช้กับ Elastic Beanstalk
⚠หมายเหตุ
ก่อนหน้านี้ เวลาที่บัญชี AWS มีการสร้าง Environment ขึ้นมาเป็นครั้งแรก Elastic Beanstalk จะสร้าง EC2 instance profile ที่เป็นค่าเริ่มต้นขึ้นมาโดยอัตโนมัติ ชื่อว่า aws-elasticbeanstalk-ec2-role
โดยที่ Instance Profile ตัวนี้จะมีพวก Managed Policies ที่เป็นค่าเริ่มต้นอยู่ แต่ถ้าหากคุณมี Instance Profile อยู่แล้ว คุณก็สามารถนำ Instance Profile นี้มาใช้งานได้ทันทีเช่นกัน
อย่างไรก็ตาม ข้อกำหนดในด้านความปลอดภัยของ AWS ที่ออกมาล่าสุดนั้น ไม่อนุญาตให้บริการของ AWS สร้าง Roles สำหรับบริการอื่น ๆ ของ AWS ขึ้นมาเอง ซึ่งในกรณีนี้คือ EC2 และด้วยเหตุนี้เอง Elastic Beanstalk จะไม่สร้าง Instance profile aws-elasticbeanstalk-ec2-role
ที่เป็นค่าเริ่มต้นให้โดยอัตโนมัติอีกต่อไป
หากต้องการสร้าง Environment ใน Elastic Beanstalk จำเป็นต้องสร้าง Service role และ Instance profile ใน IAM เตรียมไว้ก่อน
ข้อกำหนดเบื้องต้น
ครั้งนี้จะสร้าง IAM Role โดยกำหนดชื่อและ Permissions ตาม Documentation ของ AWS ดังนี้
IAM Role Name | Permissions |
---|---|
aws-elasticbeanstalk-service-role | AWSElasticBeanstalkEnhancedHealth |
AWSElasticBeanstalkService | |
aws-elasticbeanstalk-ec2-role | AWSElasticBeanstalkWebTier |
AWSElasticBeanstalkWorkerTier | |
AWSElasticBeanstalkMulticontainerDocker |
อ่านรายละเอียดเพิ่มเติมได้ที่ลิงก์ด้านล่างนี้
สร้าง Service role
เข้ามาหน้าจอ Service IAM
> คลิก Roles
ในหัวข้อ Access management ที่เมนูด้านซ้าย > คลิก Create role
แล้วเริ่มสร้างตามขั้นตอนด้านล่างนี้
Step 1: Select trusted entity
หัวข้อ Trusted entity type
・AWS service
หัวข้อ Use case
・Service or use case: Elastic Beanstalk
Step 2: Add permissions
หัวข้อ Permissions policies
Step นี้ไม่ต้องทำอะไร เพราะ Policy name จะถูกเลือกให้ใช้งานสำหรับ Elastic Beanstalk โดยอัตโนมัติ ให้คลิก Next
ได้เลย
Step 3: Name, review, and create
หัวข้อ Role details
・Role name: aws-elasticbeanstalk-service-role
(ป้อนชื่อตาม Documentation ของ AWS)
เลื่อนลงมาด้านล่าง แล้วคลิก Create role
แล้วค้นหาและคลิกเข้ามาที่ Role ตามชื่อที่สร้าง แล้วดูที่ Permissions policies จะเห็นว่ามี Policy name แสดงตามที่ AWS เตรียมไว้ให้ตอนสร้างแบบนี้
สร้าง Instance profile
เข้ามาหน้าจอ Service IAM
> คลิก Roles
ในหัวข้อ Access management ที่เมนูด้านซ้าย > คลิก Create role
แล้วเริ่มสร้างตามขั้นตอนด้านล่างนี้
Step 1: Select trusted entity
หัวข้อ Trusted entity type
・เลือก AWS service
หัวข้อ Use case
・เลือก Service or use case: EC2
Step 2: Add permissions
หัวข้อ Permissions policies
ค้นหาและติ๊ก Policy name ทั้ง 3 อันตามด้านล่างนี้
・✅ AWSElasticBeanstalkWebTier
・✅ AWSElasticBeanstalkWorkerTier
・✅ AWSElasticBeanstalkMulticontainerDocker
Step 3: Name, review, and create
หัวข้อ Role details
・Role name: aws-elasticbeanstalk-ec2-role
(ป้อนชื่อตาม Documentation ของ AWS)
เลื่อนลงมาที่หัวข้อ "Step 2: Add permissions" ด้านล่าง ถ้า Policy name แสดงทั้ง 3 อันตามที่ติ๊กจากขั้นตอนที่แล้ว ให้คลิก Create role
ได้เลย
แล้วค้นหาและคลิกเข้ามาที่ Role ตามชื่อที่สร้าง แล้วดูที่ Permissions policies จะเห็นว่ามี Policy name แสดงตามที่เราเพิ่มไว้แบบนี้
สรุป
เนื่องจากข้อกำหนดในด้านความปลอดภัยของ AWS ที่ออกมาล่าสุดนั้น ไม่อนุญาตให้บริการของ AWS สร้าง Roles สำหรับบริการอื่น ๆ ของ AWS ขึ้นมาเอง ดังนั้นเราจึงต้องดำเนินการสร้างด้วยตนเอง และเมื่อมี Service role และ Instance profile แล้ว ก็สามารถนำไปใช้กับ Elastic Beanstalk ได้เลยครับ
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !